﻿using System;
using System.Data.SqlClient;
using System.Text.RegularExpressions;

public partial class Services_UserActivation : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        String userStringValidation = Request.QueryString["ValidationString"];

        // Si el nombre del parámetro no existe no se ejecuta ninguna acción
        if (String.IsNullOrEmpty(userStringValidation))
        {
            Session["UsuarioStatus"] = "<div class='alert alert-error' align='center'><strong>Acci&oacute;n inv&aacute;lida.</strong></div>";
            Response.Redirect("~/Default.aspx");

        } 
        else
        {
            SecurityTools sc = new SecurityTools();
            String decodedUserStringValidation = sc.DecodeFrom64(userStringValidation);

            Match verificaMatricula = Regex.Match(decodedUserStringValidation, @"^[A|a][0-9]{8}$");

            // Si el nombre de la matrícula tiene el patrón definido por la expresión regular, se acepta
            if(verificaMatricula.Success)
            {
                DatabaseConnection dbCon = new DatabaseConnection();

                // Se verifica que el usuario exista en la base de datos
                if (dbCon.UserExists(decodedUserStringValidation, "Alumnos"))
                {
                    // Se verifica que el usuario no haya activado previamente su cuenta
                    if (!dbCon.UserValidationCheck(decodedUserStringValidation))
                    {

                        String query =
                            "UPDATE Alumnos SET Alumnos.CuentaValidada = 1 WHERE Alumnos.Matricula = @Matricula";

                        using (SqlCommand activateUser = new SqlCommand(query))
                        {
                            activateUser.Parameters.Add(new SqlParameter("@Matricula", decodedUserStringValidation));
                            dbCon.ParameterizedExecuteNonQuery(activateUser);
                            dbCon.CloseConnection();
                            Session["UsuarioStatus"] =
                                "<div class='alert alert-success' align='center'><strong>&iexcl;Felicidades! Tu cuenta ha " +
                                "sido activada con &eacute;xito. <br />Ya puedes ingresar con tu matr&iacute;cula y contrase&ntilde;a para empezar " +
                                "a realizar tu solicitud.</strong></div>";
                            Response.Redirect("~/Default.aspx");
                        }
                    }
                        // La cuenta ya había sido activada
                    else
                    {
                        dbCon.CloseConnection();
                        Session["UsuarioStatus"] =
                            "<div class='alert alert-error' align='center'><strong>Acci&oacute;n inv&aacute;lida.</strong></div>";
                        Response.Redirect("~/Default.aspx");
                    }

                }
                    // No existe el usuario
                else
                {
                    Session["UsuarioStatus"] = "<div class='alert alert-error' align='center'><strong>Acci&oacute;n inv&aacute;lida.</strong></div>";
                    Response.Redirect("~/Default.aspx");
                }
            }
                // La matrícula no es correcta
            else
            {
                Session["UsuarioStatus"] = "<div class='alert alert-error' align='center'><strong>Acci&oacute;n inv&aacute;lida.</strong></div>";
                Response.Redirect("~/Default.aspx");
            }
        }

    }
}